package com.collections;

import com.google.common.collect.Range;
import com.google.common.collect.RangeSet;
import com.google.common.collect.TreeRangeSet;
import org.junit.Test;

public class RangeSetDemo {

    /**
     * RangeSet描述了一组不相连的、非空的区间。
     * 当把一个区间添加到可变的RangeSet时，所有相连的区间会被合并，空区间会被忽略
     */
    @Test
    public void rangeSetTest(){
        RangeSet<Comparable<?>> treeRangeSet = TreeRangeSet.create();
        treeRangeSet.add(Range.closed(1,10));
        //连续区间会被合并   [15,22]
        treeRangeSet.add(Range.closedOpen(15,20));
        treeRangeSet.add(Range.closed(18,22));
        treeRangeSet.remove(Range.closed(2,8)); //移除.,会把区间分割
        //遍历所有区间
        treeRangeSet.asRanges().forEach(x-> System.out.println(x));

        // 返回一个目前所有区间里的最小值到最大值的区间
        treeRangeSet.span();// [1..22]
        //获取互补区间
        treeRangeSet.complement();//[(-∞..1), (10..15), (22..+∞)]
        treeRangeSet.contains(14); //是否包含此元素  false
        //返回元素所在的区间,不包含返回null
        treeRangeSet.rangeContaining(14);
        // 是否包含某个区间
        treeRangeSet.encloses(Range.closed(1, 10)); //true
        //返回交集
        treeRangeSet.subRangeSet(Range.closed(1, 4));
    }
}
